package com.quectel.constant.core.workorder;

import com.quectel.base.tuple.Tuple2;
import com.quectel.base.tuple.Tuple3;
import com.quectel.base.tuple.Tuple4;

import java.util.function.Function;

/**
 * 工单日志的常量
 *
 * @author caolu
 * @email louis.cao@quectel.com
 */
public class WorkOrderLogConstants {
    /**
     * @param type 人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * @return
     */
    private static String getHandlerTypeName(Byte type) {
        if (WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN.equals(type)) {
            return "管理员";
        }
        return "";
    }

    /**
     * 工单初始化log的描述
     * t1:人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * t2:相应人员类型对应的人员类型名称
     */
    public static final Function<Tuple2<Byte, String>, String> INIT_LOG_DESC_FUNC = tp ->
            String.format("由%s: %s 创建了工单", getHandlerTypeName(tp.getT1()), tp.getT2());

    /**
     * 接单类型log描述
     * t1:人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * t2:相应人员类型对应的人员类型名称
     */
    public static final Function<Tuple2<Byte, String>, String> HANDLING_LOG_DESC_FUNC = tp ->
            String.format("由%s: %s 接单", getHandlerTypeName(tp.getT1()), tp.getT2());


    /**
     * 指派
     * t1:发起人人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * t2:发起人相应人员类型对应的人员类型名称
     * t3:接收人人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * t4:接收人相应人员类型对应的人员类型名称
     */
    public static final Function<Tuple4<Byte, String, Byte, String>, String> FORWARD_LOG_DESC_FUNC = tp ->
            String.format("由%s: %s 指派工单给%s: %s", getHandlerTypeName(tp.getT1()), tp.getT2(), getHandlerTypeName(tp.getT3()), tp.getT4());


    /**
     * 结束log
     * t1:人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * t2:相应人员类型对应的人员类型名称
     * t3:完成描述
     */
    public static final Function<Tuple3<Byte, String, String>, String> FINISH_LOG_DESC_FUNC = tp ->
            String.format("由%s: %s 标记工单完成", getHandlerTypeName(tp.getT1()), tp.getT2());


    /**
     * 评价log
     * t1:人员类型 如：WorkOrderConstants.ORDER_HANDLER_TYPE_ADMIN
     * t2:相应人员类型对应的人员类型名称
     * t3:评价描述
     */
    public static final Function<Tuple3<Byte, String, String>, String> COMMENT_LOG_DESC_FUNC = tp ->
            String.format("由%s: %s 已评价", getHandlerTypeName(tp.getT1()), tp.getT2());


}
